/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (the "License"); you may not use this
 * file except in compliance with the License. You may obtain a copy of the
 * License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */
/**
 * Nudm_SDM
 * Nudm Subscriber Data Management Service. � 2019, 3GPP Organizational Partners
 * (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
 *
 * The version of the OpenAPI document: 2.1.0.alpha-1
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator
 * (https://openapi-generator.tech). https://openapi-generator.tech Do not edit
 * the class manually.
 */
/*
 * AccessAndMobilitySubscriptionData.h
 *
 *
 */

#ifndef AccessAndMobilitySubscriptionData_H_
#define AccessAndMobilitySubscriptionData_H_

#include <nlohmann/json.hpp>
#include <string>
#include <vector>

#include "AmbrRm.h"
#include "Area.h"
#include "CoreNetworkType.h"
#include "Nssai.h"
#include "OdbPacketServices.h"
#include "RatType.h"
#include "SorInfo.h"
#include "TraceData.h"
#include "UpuInfo.h"

namespace oai {
namespace udm {
namespace model {

/// <summary>
///
/// </summary>
class AccessAndMobilitySubscriptionData {
 public:
  AccessAndMobilitySubscriptionData();
  virtual ~AccessAndMobilitySubscriptionData();

  void validate();

  /////////////////////////////////////////////
  /// AccessAndMobilitySubscriptionData members

  /// <summary>
  ///
  /// </summary>
  std::string getSupportedFeatures() const;
  void setSupportedFeatures(std::string const& value);
  bool supportedFeaturesIsSet() const;
  void unsetSupportedFeatures();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getGpsis();
  bool gpsisIsSet() const;
  void unsetGpsis();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getInternalGroupIds();
  bool internalGroupIdsIsSet() const;
  void unsetInternalGroupIds();
  /// <summary>
  ///
  /// </summary>
  AmbrRm getSubscribedUeAmbr() const;
  void setSubscribedUeAmbr(AmbrRm const& value);
  bool subscribedUeAmbrIsSet() const;
  void unsetSubscribedUeAmbr();
  /// <summary>
  ///
  /// </summary>
  Nssai getNssai() const;
  void setNssai(Nssai const& value);
  bool nssaiIsSet() const;
  void unsetNssai();
  /// <summary>
  ///
  /// </summary>
  std::vector<RatType>& getRatRestrictions();
  bool ratRestrictionsIsSet() const;
  void unsetRatRestrictions();
  /// <summary>
  ///
  /// </summary>
  std::vector<Area>& getForbiddenAreas();
  bool forbiddenAreasIsSet() const;
  void unsetForbiddenAreas();
  /// <summary>
  ///
  /// </summary>
  std::vector<CoreNetworkType>& getCoreNetworkTypeRestrictions();
  bool coreNetworkTypeRestrictionsIsSet() const;
  void unsetCoreNetworkTypeRestrictions();
  /// <summary>
  ///
  /// </summary>
  int32_t getRfspIndex() const;
  void setRfspIndex(int32_t const value);
  bool rfspIndexIsSet() const;
  void unsetRfspIndex();
  /// <summary>
  ///
  /// </summary>
  int32_t getSubsRegTimer() const;
  void setSubsRegTimer(int32_t const value);
  bool subsRegTimerIsSet() const;
  void unsetSubsRegTimer();
  /// <summary>
  ///
  /// </summary>
  int32_t getUeUsageType() const;
  void setUeUsageType(int32_t const value);
  bool ueUsageTypeIsSet() const;
  void unsetUeUsageType();
  /// <summary>
  ///
  /// </summary>
  bool isMpsPriority() const;
  void setMpsPriority(bool const value);
  bool mpsPriorityIsSet() const;
  void unsetMpsPriority();
  /// <summary>
  ///
  /// </summary>
  bool isMcsPriority() const;
  void setMcsPriority(bool const value);
  bool mcsPriorityIsSet() const;
  void unsetMcsPriority();
  /// <summary>
  ///
  /// </summary>
  int32_t getActiveTime() const;
  void setActiveTime(int32_t const value);
  bool activeTimeIsSet() const;
  void unsetActiveTime();
  /// <summary>
  ///
  /// </summary>
  int32_t getDlPacketCount() const;
  void setDlPacketCount(int32_t const value);
  bool dlPacketCountIsSet() const;
  void unsetDlPacketCount();
  /// <summary>
  ///
  /// </summary>
  SorInfo getSorInfo() const;
  void setSorInfo(SorInfo const& value);
  bool sorInfoIsSet() const;
  void unsetSorInfo();
  /// <summary>
  ///
  /// </summary>
  UpuInfo getUpuInfo() const;
  void setUpuInfo(UpuInfo const& value);
  bool upuInfoIsSet() const;
  void unsetUpuInfo();
  /// <summary>
  ///
  /// </summary>
  bool isMicoAllowed() const;
  void setMicoAllowed(bool const value);
  bool micoAllowedIsSet() const;
  void unsetMicoAllowed();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getSharedAmDataIds();
  bool sharedAmDataIdsIsSet() const;
  void unsetSharedAmDataIds();
  /// <summary>
  ///
  /// </summary>
  OdbPacketServices getOdbPacketServices() const;
  void setOdbPacketServices(OdbPacketServices const& value);
  bool odbPacketServicesIsSet() const;
  void unsetOdbPacketServices();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getSubscribedDnnList();
  bool subscribedDnnListIsSet() const;
  void unsetSubscribedDnnList();
  /// <summary>
  ///
  /// </summary>
  int32_t getServiceGapTime() const;
  void setServiceGapTime(int32_t const value);
  bool serviceGapTimeIsSet() const;
  void unsetServiceGapTime();
  /// <summary>
  ///
  /// </summary>
  TraceData getTraceData() const;
  void setTraceData(TraceData const& value);
  bool traceDataIsSet() const;
  void unsetTraceData();

  friend void to_json(
      nlohmann::json& j, const AccessAndMobilitySubscriptionData& o);
  friend void from_json(
      const nlohmann::json& j, AccessAndMobilitySubscriptionData& o);

 protected:
  std::string m_SupportedFeatures;
  bool m_SupportedFeaturesIsSet;
  std::vector<std::string> m_Gpsis;
  bool m_GpsisIsSet;
  std::vector<std::string> m_InternalGroupIds;
  bool m_InternalGroupIdsIsSet;
  AmbrRm m_SubscribedUeAmbr;
  bool m_SubscribedUeAmbrIsSet;
  Nssai m_Nssai;
  bool m_NssaiIsSet;
  std::vector<RatType> m_RatRestrictions;
  bool m_RatRestrictionsIsSet;
  std::vector<Area> m_ForbiddenAreas;
  bool m_ForbiddenAreasIsSet;
  std::vector<CoreNetworkType> m_CoreNetworkTypeRestrictions;
  bool m_CoreNetworkTypeRestrictionsIsSet;
  int32_t m_RfspIndex;
  bool m_RfspIndexIsSet;
  int32_t m_SubsRegTimer;
  bool m_SubsRegTimerIsSet;
  int32_t m_UeUsageType;
  bool m_UeUsageTypeIsSet;
  bool m_MpsPriority;
  bool m_MpsPriorityIsSet;
  bool m_McsPriority;
  bool m_McsPriorityIsSet;
  int32_t m_ActiveTime;
  bool m_ActiveTimeIsSet;
  int32_t m_DlPacketCount;
  bool m_DlPacketCountIsSet;
  SorInfo m_SorInfo;
  bool m_SorInfoIsSet;
  UpuInfo m_UpuInfo;
  bool m_UpuInfoIsSet;
  bool m_MicoAllowed;
  bool m_MicoAllowedIsSet;
  std::vector<std::string> m_SharedAmDataIds;
  bool m_SharedAmDataIdsIsSet;
  OdbPacketServices m_OdbPacketServices;
  bool m_OdbPacketServicesIsSet;
  std::vector<std::string> m_SubscribedDnnList;
  bool m_SubscribedDnnListIsSet;
  int32_t m_ServiceGapTime;
  bool m_ServiceGapTimeIsSet;
  TraceData m_TraceData;
  bool m_TraceDataIsSet;
};

}  // namespace model
}  // namespace udm
}  // namespace oai

#endif /* AccessAndMobilitySubscriptionData_H_ */
